#if !defined(__APP_BUFFER_H__)
#define __APP_BUFFER_H__

#include <pthread.h>

typedef struct BufferStruct
{
    unsigned char *ptr;   // 缓存区指针
    int size;             // 缓存区长度
    int start;            // 数据起始偏移量
    int len;              // 缓存区中数据总长度
    pthread_mutex_t lock; // 缓存锁
} Buffer;

/**
 * @brief 初始化缓存结构体, 未经初始化的buffer结构体，所有字节必须为0
 *
 * @param buffer 需要初始化的结构体
 * @param n      缓存大小
 * @return int   0 成功 -1 失败
 */
int app_buffer_init(Buffer *buffer, int n);

/**
 * @brief 清理缓存，释放申请的内存空间
 *
 * @param buffer 需要释放的结构体
 */
void app_buffer_free(Buffer *buffer);

/**
 * @brief 从缓存中读取数据到buf
 *
 * @param buffer
 * @param buf
 * @param len
 * @return int 成功返回实际读取的长度，失败返回-1
 */
int app_buffer_read(Buffer *buffer, void *buf, int len);

/**
 * @brief 向缓存中写入buf的数据
 *
 * @param buffer
 * @param buf
 * @param len
 * @return int 0 成功 -1 失败
 */
int app_buffer_write(Buffer *buffer, void *buf, int len);

#endif // __APP_BUFFER_H__
